* install-sh, mkinstalldirs, move-if-change: Update from master
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 7 Jan 2011 20:42:11 +0000 (12:42 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 7 Jan 2011 20:42:11 +0000 (12:42 -0800)
1  2 
ChangeLog
admin/ChangeLog
admin/notes/copyright
install-sh
mkinstalldirs
move-if-change

diff --cc ChangeLog
index b6c2e499982e80c9a605db8527ef77175f4cff5b,b6c2e499982e80c9a605db8527ef77175f4cff5b..fdf037c24c710efbb5b415b5a171e3c24976bc25
+++ b/ChangeLog
@@@ -1,5 -1,5 +1,8 @@@
  2011-01-07  Paul Eggert  <eggert@cs.ucla.edu>
  
++      * install-sh, mkinstalldirs, move-if-change: Update from master
++      source in gnulib.
++
        * config.guess, config.sub: Updated from master source.
  
  2011-01-05  Andreas Schwab  <schwab@linux-m68k.org>
diff --cc admin/ChangeLog
index d008c14e5f43492b335e23f92d10bf17c12f7980,d008c14e5f43492b335e23f92d10bf17c12f7980..07ed0179db0707ba0e93a00328d84c8febdda288
@@@ -1,4 -1,4 +1,10 @@@
--2011-01-02  Paul Eggert  <eggert@cs.ucla.edu>
++2011-01-07  Paul Eggert  <eggert@cs.ucla.edu>
++
++      * notes/copyright: There's only one install-sh, not two, so fix a
++      typo claiming that there's two.  Add move-if-change to the list of
++      GPL files imported from gnulib.
++
++2011-01-07  Paul Eggert  <eggert@cs.ucla.edu>
  
        * notes/copyright: Report status more accurately for non-GPL files.
        Report copyright status more accurately for mkinstalldirs,
index 02aa3ba79c6be3cda07e5a53bd33c8bf3f5a1263,02aa3ba79c6be3cda07e5a53bd33c8bf3f5a1263..174d124f39d4bf2821852baaea56a866656ad2d8
@@@ -138,8 -138,8 +138,7 @@@ configur
  m4/getopt.m4
   - copyright FSF, with MIT-like license
  
--<top-level>/install-sh
--lispintro/install-sh
++install-sh
   - this file is copyright MIT, which is OK. Leave the copyright alone.
  
  mkinstalldirs
@@@ -621,6 -621,6 +620,7 @@@ of writing) GPL >= 2. rms says may as w
  alone (may import them from Gnulib again). These are:
  
      Gnulib:
++    move-if-change
      src/getloadavg.c
      src/gmalloc.c
      src/md5.c
diff --cc install-sh
index 058b26c82d24335834ad0472109d0cbc1c829084,058b26c82d24335834ad0472109d0cbc1c829084..3f83ce9b555a535ca90c450882953554c7e4ded5
--#! /bin/sh
--#
++#!/bin/sh
  # install - install a program, script, or datafile
--# This comes from X11R5 (mit/util/scripts/install.sh).
++
++scriptversion=2010-02-06.18; # UTC
++
++# This originates from X11R5 (mit/util/scripts/install.sh), which was
++# later released in X11R6 (xc/config/util/install.sh) with the
++# following copyright and license.
++#
++# Copyright (C) 1994 X Consortium
++#
++# Permission is hereby granted, free of charge, to any person obtaining a copy
++# of this software and associated documentation files (the "Software"), to
++# deal in the Software without restriction, including without limitation the
++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++# sell copies of the Software, and to permit persons to whom the Software is
++# furnished to do so, subject to the following conditions:
++#
++# The above copyright notice and this permission notice shall be included in
++# all copies or substantial portions of the Software.
++#
++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  #
--# Copyright 1991 by the Massachusetts Institute of Technology
++# Except as contained in this notice, the name of the X Consortium shall not
++# be used in advertising or otherwise to promote the sale, use or other deal-
++# ings in this Software without prior written authorization from the X Consor-
++# tium.
  #
--# Permission to use, copy, modify, distribute, and sell this software and its
--# documentation for any purpose is hereby granted without fee, provided that
--# the above copyright notice appear in all copies and that both that
--# copyright notice and this permission notice appear in supporting
--# documentation, and that the name of M.I.T. not be used in advertising or
--# publicity pertaining to distribution of the software without specific,
--# written prior permission.  M.I.T. makes no representations about the
--# suitability of this software for any purpose.  It is provided "as is"
--# without express or implied warranty.
++#
++# FSF changes to this file are in the public domain.
  #
  # Calling this script install-sh is preferred over install.sh, to prevent
  # `make' implicit rules from creating a file called install from it
  # when there is no Makefile.
  #
  # This script is compatible with the BSD install script, but was written
--# from scratch.  It can only install one file at a time, a restriction
--# shared with many OS's install programs.
++# from scratch.
  
++nl='
++'
++IFS=" ""      $nl"
  
  # set DOITPROG to echo to test this script
  
  # Don't use :- since 4.3BSD and earlier shells don't like it.
--doit="${DOITPROG-}"
--
--
--# put in absolute paths if you don't have them in your path; or use env. vars.
--
--mvprog="${MVPROG-mv}"
--cpprog="${CPPROG-cp}"
--chmodprog="${CHMODPROG-chmod}"
--chownprog="${CHOWNPROG-chown}"
--chgrpprog="${CHGRPPROG-chgrp}"
--stripprog="${STRIPPROG-strip}"
--rmprog="${RMPROG-rm}"
--mkdirprog="${MKDIRPROG-mkdir}"
--
--transformbasename=""
--transform_arg=""
--instcmd="$mvprog"
--chmodcmd="$chmodprog 0755"
--chowncmd=""
--chgrpcmd=""
--stripcmd=""
--rmcmd="$rmprog -f"
--mvcmd="$mvprog"
--src=""
--dst=""
--dir_arg=""
--
--while [ x"$1" != x ]; do
--    case $1 in
--      -c) instcmd="$cpprog"
--          shift
--          continue;;
--
--      -d) dir_arg=true
--          shift
--          continue;;
--
--      -m) chmodcmd="$chmodprog $2"
--          shift
--          shift
--          continue;;
--
--      -o) chowncmd="$chownprog $2"
--          shift
--          shift
--          continue;;
--
--      -g) chgrpcmd="$chgrpprog $2"
--          shift
--          shift
--          continue;;
--
--      -s) stripcmd="$stripprog"
--          shift
--          continue;;
--
--      -t=*) transformarg=`echo $1 | sed 's/-t=//'`
--          shift
--          continue;;
--
--      -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
--          shift
--          continue;;
--
--      *)  if [ x"$src" = x ]
--          then
--              src=$1
--          else
--              # this colon is to work around a 386BSD /bin/sh bug
--              :
--              dst=$1
--          fi
--          shift
--          continue;;
--    esac
--done
--
--if [ x"$src" = x ]
--then
--      echo "install:  no input file specified"
--      exit 1
++doit=${DOITPROG-}
++if test -z "$doit"; then
++  doit_exec=exec
  else
--      true
++  doit_exec=$doit
  fi
  
--if [ x"$dir_arg" != x ]; then
--      dst=$src
--      src=""
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
++
++chgrpprog=${CHGRPPROG-chgrp}
++chmodprog=${CHMODPROG-chmod}
++chownprog=${CHOWNPROG-chown}
++cmpprog=${CMPPROG-cmp}
++cpprog=${CPPROG-cp}
++mkdirprog=${MKDIRPROG-mkdir}
++mvprog=${MVPROG-mv}
++rmprog=${RMPROG-rm}
++stripprog=${STRIPPROG-strip}
++
++posix_glob='?'
++initialize_posix_glob='
++  test "$posix_glob" != "?" || {
++    if (set -f) 2>/dev/null; then
++      posix_glob=
++    else
++      posix_glob=:
++    fi
++  }
++'
  
--      if [ -d $dst ]; then
--              instcmd=:
--      else
--              instcmd=mkdir
--      fi
--else
++posix_mkdir=
  
--# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
--# might cause directories to be created, which would be especially bad
--# if $src (and thus $dsttmp) contains '*'.
++# Desired mode of installed file.
++mode=0755
  
--      if [ -f $src -o -d $src ]
--      then
--              true
--      else
--              echo "install:  $src does not exist"
--              exit 1
--      fi
++chgrpcmd=
++chmodcmd=$chmodprog
++chowncmd=
++mvcmd=$mvprog
++rmcmd="$rmprog -f"
++stripcmd=
  
--      if [ x"$dst" = x ]
--      then
--              echo "install:  no destination specified"
--              exit 1
--      else
--              true
--      fi
++src=
++dst=
++dir_arg=
++dst_arg=
  
--# If destination is a directory, append the input filename; if your system
--# does not like double slashes in filenames, you may need to add some logic
++copy_on_change=false
++no_target_directory=
  
--      if [ -d $dst ]
--      then
--              dst="$dst"/`basename $src`
--      else
--              true
--      fi
--fi
++usage="\
++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++   or: $0 [OPTION]... SRCFILES... DIRECTORY
++   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
++   or: $0 [OPTION]... -d DIRECTORIES...
  
--## this sed command emulates the dirname command
--dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
++In the 1st form, copy SRCFILE to DSTFILE.
++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
++In the 4th, create DIRECTORIES.
  
--# Make sure that the destination directory exists.
--#  this part is taken from Noah Friedman's mkinstalldirs script
++Options:
++     --help     display this help and exit.
++     --version  display version info and exit.
  
--# Skip lots of stat calls in the usual case.
--if [ ! -d "$dstdir" ]; then
--defaultIFS='
--'
--IFS="${IFS-${defaultIFS}}"
++  -c            (ignored)
++  -C            install only if different (preserve the last data modification time)
++  -d            create directories instead of installing files.
++  -g GROUP      $chgrpprog installed files to GROUP.
++  -m MODE       $chmodprog installed files to MODE.
++  -o USER       $chownprog installed files to USER.
++  -s            $stripprog installed files.
++  -t DIRECTORY  install into DIRECTORY.
++  -T            report an error if DSTFILE is a directory.
  
--oIFS="${IFS}"
--# Some sh's can't handle IFS=/ for some reason.
--IFS='%'
--set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
--IFS="${oIFS}"
++Environment variables override the default commands:
++  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
++  RMPROG STRIPPROG
++"
  
--pathcomp=''
++while test $# -ne 0; do
++  case $1 in
++    -c) ;;
  
--while [ $# -ne 0 ] ; do
--      pathcomp="${pathcomp}${1}"
--      shift
++    -C) copy_on_change=true;;
  
--      if [ ! -d "${pathcomp}" ] ;
--        then
--              $mkdirprog "${pathcomp}"
--      else
--              true
--      fi
--
--      pathcomp="${pathcomp}/"
--done
--fi
++    -d) dir_arg=true;;
  
--if [ x"$dir_arg" != x ]
--then
--      $doit $instcmd $dst &&
++    -g) chgrpcmd="$chgrpprog $2"
++      shift;;
  
--      if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
--      if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
--      if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
--      if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
--else
++    --help) echo "$usage"; exit $?;;
  
--# If we're going to rename the final executable, determine the name now.
++    -m) mode=$2
++      case $mode in
++        *' '* | *'    '* | *'
++'*      | *'*'* | *'?'* | *'['*)
++          echo "$0: invalid mode: $mode" >&2
++          exit 1;;
++      esac
++      shift;;
  
--      if [ x"$transformarg" = x ]
--      then
--              dstfile=`basename $dst`
--      else
--              dstfile=`basename $dst $transformbasename |
--                      sed $transformarg`$transformbasename
--      fi
++    -o) chowncmd="$chownprog $2"
++      shift;;
  
--# don't allow the sed command to completely eliminate the filename
++    -s) stripcmd=$stripprog;;
  
--      if [ x"$dstfile" = x ]
--      then
--              dstfile=`basename $dst`
--      else
--              true
--      fi
++    -t) dst_arg=$2
++      shift;;
  
--# Make a temp file name in the proper directory.
++    -T) no_target_directory=true;;
  
--      dsttmp=$dstdir/#inst.$$#
++    --version) echo "$0 $scriptversion"; exit $?;;
  
--# Move or copy the file name to the temp name
++    --)       shift
++      break;;
  
--      $doit $instcmd $src $dsttmp &&
++    -*)       echo "$0: invalid option: $1" >&2
++      exit 1;;
  
--      trap "rm -f ${dsttmp}" 0 &&
++    *)  break;;
++  esac
++  shift
++done
  
--# and set any options; do chmod last to preserve setuid bits
++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++  # When -d is used, all remaining arguments are directories to create.
++  # When -t is used, the destination is already specified.
++  # Otherwise, the last argument is the destination.  Remove it from $@.
++  for arg
++  do
++    if test -n "$dst_arg"; then
++      # $@ is not empty: it contains at least $arg.
++      set fnord "$@" "$dst_arg"
++      shift # fnord
++    fi
++    shift # arg
++    dst_arg=$arg
++  done
++fi
  
--# If any of these fail, we abort the whole thing.  If we want to
--# ignore errors from any of these, just make sure not to ignore
--# errors from the above "$doit $instcmd $src $dsttmp" command.
++if test $# -eq 0; then
++  if test -z "$dir_arg"; then
++    echo "$0: no input file specified." >&2
++    exit 1
++  fi
++  # It's OK to call `install-sh -d' without argument.
++  # This can happen when creating conditional directories.
++  exit 0
++fi
  
--      if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
--      if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
--      if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
--      if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
++if test -z "$dir_arg"; then
++  do_exit='(exit $ret); exit $ret'
++  trap "ret=129; $do_exit" 1
++  trap "ret=130; $do_exit" 2
++  trap "ret=141; $do_exit" 13
++  trap "ret=143; $do_exit" 15
++
++  # Set umask so as not to create temps with too-generous modes.
++  # However, 'strip' requires both read and write access to temps.
++  case $mode in
++    # Optimize common cases.
++    *644) cp_umask=133;;
++    *755) cp_umask=22;;
++
++    *[0-7])
++      if test -z "$stripcmd"; then
++      u_plus_rw=
++      else
++      u_plus_rw='% 200'
++      fi
++      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++    *)
++      if test -z "$stripcmd"; then
++      u_plus_rw=
++      else
++      u_plus_rw=,u+rw
++      fi
++      cp_umask=$mode$u_plus_rw;;
++  esac
++fi
  
--# Now rename the file to the real destination.
++for src
++do
++  # Protect names starting with `-'.
++  case $src in
++    -*) src=./$src;;
++  esac
++
++  if test -n "$dir_arg"; then
++    dst=$src
++    dstdir=$dst
++    test -d "$dstdir"
++    dstdir_status=$?
++  else
++
++    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
++    # might cause directories to be created, which would be especially bad
++    # if $src (and thus $dsttmp) contains '*'.
++    if test ! -f "$src" && test ! -d "$src"; then
++      echo "$0: $src does not exist." >&2
++      exit 1
++    fi
++
++    if test -z "$dst_arg"; then
++      echo "$0: no destination specified." >&2
++      exit 1
++    fi
++
++    dst=$dst_arg
++    # Protect names starting with `-'.
++    case $dst in
++      -*) dst=./$dst;;
++    esac
  
--      $doit $rmcmd -f $dstdir/$dstfile &&
--      $doit $mvcmd $dsttmp $dstdir/$dstfile
++    # If destination is a directory, append the input filename; won't work
++    # if double slashes aren't ignored.
++    if test -d "$dst"; then
++      if test -n "$no_target_directory"; then
++      echo "$0: $dst_arg: Is a directory" >&2
++      exit 1
++      fi
++      dstdir=$dst
++      dst=$dstdir/`basename "$src"`
++      dstdir_status=0
++    else
++      # Prefer dirname, but fall back on a substitute if dirname fails.
++      dstdir=`
++      (dirname "$dst") 2>/dev/null ||
++      expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++           X"$dst" : 'X\(//\)[^/]' \| \
++           X"$dst" : 'X\(//\)$' \| \
++           X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++      echo X"$dst" |
++          sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++                 s//\1/
++                 q
++               }
++               /^X\(\/\/\)[^/].*/{
++                 s//\1/
++                 q
++               }
++               /^X\(\/\/\)$/{
++                 s//\1/
++                 q
++               }
++               /^X\(\/\).*/{
++                 s//\1/
++                 q
++               }
++               s/.*/./; q'
++      `
++
++      test -d "$dstdir"
++      dstdir_status=$?
++    fi
++  fi
++
++  obsolete_mkdir_used=false
++
++  if test $dstdir_status != 0; then
++    case $posix_mkdir in
++      '')
++      # Create intermediate dirs using mode 755 as modified by the umask.
++      # This is like FreeBSD 'install' as of 1997-10-28.
++      umask=`umask`
++      case $stripcmd.$umask in
++        # Optimize common cases.
++        *[2367][2367]) mkdir_umask=$umask;;
++        .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++        *[0-7])
++          mkdir_umask=`expr $umask + 22 \
++            - $umask % 100 % 40 + $umask % 20 \
++            - $umask % 10 % 4 + $umask % 2
++          `;;
++        *) mkdir_umask=$umask,go-w;;
++      esac
++
++      # With -d, create the new directory with the user-specified mode.
++      # Otherwise, rely on $mkdir_umask.
++      if test -n "$dir_arg"; then
++        mkdir_mode=-m$mode
++      else
++        mkdir_mode=
++      fi
  
--fi &&
++      posix_mkdir=false
++      case $umask in
++        *[123567][0-7][0-7])
++          # POSIX mkdir -p sets u+wx bits regardless of umask, which
++          # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++          ;;
++        *)
++          tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++          trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
++
++          if (umask $mkdir_umask &&
++              exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++          then
++            if test -z "$dir_arg" || {
++                 # Check for POSIX incompatibilities with -m.
++                 # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++                 # other-writeable bit of parent directory when it shouldn't.
++                 # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++                 ls_ld_tmpdir=`ls -ld "$tmpdir"`
++                 case $ls_ld_tmpdir in
++                   d????-?r-*) different_mode=700;;
++                   d????-?--*) different_mode=755;;
++                   *) false;;
++                 esac &&
++                 $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++                   ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++                   test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++                 }
++               }
++            then posix_mkdir=:
++            fi
++            rmdir "$tmpdir/d" "$tmpdir"
++          else
++            # Remove any dirs left behind by ancient mkdir implementations.
++            rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++          fi
++          trap '' 0;;
++      esac;;
++    esac
  
++    if
++      $posix_mkdir && (
++      umask $mkdir_umask &&
++      $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++      )
++    then :
++    else
++
++      # The umask is ridiculous, or mkdir does not conform to POSIX,
++      # or it failed possibly due to a race condition.  Create the
++      # directory the slow way, step by step, checking for races as we go.
++
++      case $dstdir in
++      /*) prefix='/';;
++      -*) prefix='./';;
++      *)  prefix='';;
++      esac
++
++      eval "$initialize_posix_glob"
++
++      oIFS=$IFS
++      IFS=/
++      $posix_glob set -f
++      set fnord $dstdir
++      shift
++      $posix_glob set +f
++      IFS=$oIFS
++
++      prefixes=
++
++      for d
++      do
++      test -z "$d" && continue
++
++      prefix=$prefix$d
++      if test -d "$prefix"; then
++        prefixes=
++      else
++        if $posix_mkdir; then
++          (umask=$mkdir_umask &&
++           $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++          # Don't fail if two instances are running concurrently.
++          test -d "$prefix" || exit 1
++        else
++          case $prefix in
++            *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++            *) qprefix=$prefix;;
++          esac
++          prefixes="$prefixes '$qprefix'"
++        fi
++      fi
++      prefix=$prefix/
++      done
++
++      if test -n "$prefixes"; then
++      # Don't fail if two instances are running concurrently.
++      (umask $mkdir_umask &&
++       eval "\$doit_exec \$mkdirprog $prefixes") ||
++        test -d "$dstdir" || exit 1
++      obsolete_mkdir_used=true
++      fi
++    fi
++  fi
++
++  if test -n "$dir_arg"; then
++    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
++  else
++
++    # Make a couple of temp file names in the proper directory.
++    dsttmp=$dstdir/_inst.$$_
++    rmtmp=$dstdir/_rm.$$_
++
++    # Trap to clean up those temp files at exit.
++    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
++
++    # Copy the file name to the temp name.
++    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
++
++    # and set any options; do chmod last to preserve setuid bits.
++    #
++    # If any of these fail, we abort the whole thing.  If we want to
++    # ignore errors from any of these, just make sure not to ignore
++    # errors from the above "$doit $cpprog $src $dsttmp" command.
++    #
++    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
++    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
++    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
++
++    # If -C, don't bother to copy if it wouldn't change the file.
++    if $copy_on_change &&
++       old=`LC_ALL=C ls -dlL "$dst"   2>/dev/null` &&
++       new=`LC_ALL=C ls -dlL "$dsttmp"        2>/dev/null` &&
++
++       eval "$initialize_posix_glob" &&
++       $posix_glob set -f &&
++       set X $old && old=:$2:$4:$5:$6 &&
++       set X $new && new=:$2:$4:$5:$6 &&
++       $posix_glob set +f &&
++
++       test "$old" = "$new" &&
++       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
++    then
++      rm -f "$dsttmp"
++    else
++      # Rename the file to the real destination.
++      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
++
++      # The rename failed, perhaps because mv can't rename something else
++      # to itself, or perhaps because mv is so ancient that it does not
++      # support -f.
++      {
++      # Now remove or move aside any old file at destination location.
++      # We try this two ways since rm can't unlink itself on some
++      # systems and the destination file might be busy for other
++      # reasons.  In this case, the final cleanup might fail but the new
++      # file should still install successfully.
++      {
++        test ! -f "$dst" ||
++        $doit $rmcmd -f "$dst" 2>/dev/null ||
++        { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
++          { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
++        } ||
++        { echo "$0: cannot unlink or rename $dst" >&2
++          (exit 1); exit 1
++        }
++      } &&
++
++      # Now rename the file to the real destination.
++      $doit $mvcmd "$dsttmp" "$dst"
++      }
++    fi || exit 1
++
++    trap '' 0
++  fi
++done
  
--exit 0
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
diff --cc mkinstalldirs
index be98de6be01a1ec467902370b497291cb5d89596,be98de6be01a1ec467902370b497291cb5d89596..4191a45dbd72ecd24c25b45a53e94ea0a4b5baf7
@@@ -1,7 -1,7 +1,7 @@@
  #! /bin/sh
  # mkinstalldirs --- make directory hierarchy
  
--scriptversion=2006-05-11.19
++scriptversion=2009-04-28.21; # UTC
  
  # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
  # Created: 1993-05-16
@@@ -150,3 -150,3 +150,13 @@@ d
  done
  
  exit $errstatus
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
diff --cc move-if-change
index ee9e355e3e61d569f9102f4387b108c3cf6dfa04,ee9e355e3e61d569f9102f4387b108c3cf6dfa04..a891ca51f0cd90ee33abea813faf4ab2f808075e
@@@ -1,15 -1,15 +1,77 @@@
  #!/bin/sh
--if
--test -r $2
--then
--if
--cmp $1 $2 > /dev/null
--then
--echo $2 is unchanged
--rm -f $1
++# Like mv $1 $2, but if the files are the same, just delete $1.
++# Status is zero if successful, nonzero otherwise.
++
++VERSION='2007-09-28 23:10'; # UTC
++# The definition above must lie within the first 8 lines in order
++# for the Emacs time-stamp write hook (at end) to update it.
++# If you change this file with Emacs, please let the write hook
++# do its job.  Otherwise, update this string manually.
++
++# Copyright (C) 2002-2007, 2009-2011 Free Software Foundation, Inc.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++usage="usage: $0 SOURCE DEST"
++
++help="$usage
++  or:  $0 OPTION
++If SOURCE is different than DEST, then move it to DEST; else remove SOURCE.
++
++  --help     display this help and exit
++  --version  output version information and exit
++
++Report bugs to <bug-gnulib@gnu.org>."
++
++version=`expr "$VERSION" : '\([^ ]*\)'`
++version="move-if-change (gnulib) $version
++Copyright (C) 2007 Free Software Foundation, Inc.
++License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
++This is free software: you are free to change and redistribute it.
++There is NO WARRANTY, to the extent permitted by law."
++
++
++for arg
++do
++  case $arg in
++    --help | --hel | --he | --h)
++      exec echo "$help" ;;
++    --version | --versio | --versi | --vers | --ver | --ve | --v)
++      exec echo "$version" ;;
++    --)
++      shift
++      break ;;
++    -*)
++      echo "$0: invalid option: $arg" >&2
++      exit 1 ;;
++    *)
++      break ;;
++  esac
++done
++
++test $# = 2 || { echo "$0: $usage" >&2; exit 1; }
++
++if test -r "$2" && cmp -s -- "$1" "$2"; then
++  rm -f -- "$1"
  else
--mv -f $1 $2
--fi
--else
--mv -f $1 $2
++  mv -f -- "$1" "$2"
  fi
++
++## Local Variables:
++## eval: (add-hook 'write-file-hooks 'time-stamp)
++## time-stamp-start: "VERSION='"
++## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
++## time-stamp-time-zone: "UTC"
++## time-stamp-end: "'; # UTC"
++## End: